Ping               Return

ping-exe.zip   実行フアイル
ping-src.zip   ソース フアイル

ル−タなど IP Adress を割り当てた機器が複数あり、アドレスを忘れてしまい、Lan内をスキャンする必要にせまられ作りました。
サンプル プログラムを探したのですが、なかなか見つからず(C#では色々ありました)、やっと、YouTubeで見つけ利用させてもらいました.
Indyの使い方がC++Builderのヘルプでも解説が見つからず良く分かりませんでした。

//---------------------------------------------------------------------------
#include 
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma  link "IdBaseComponent"
#pragma  link "IdComponent"
#pragma  link "IdRawBase"
#pragma  link "IdIcmpClient"
#pragma  link "IdRawClient"
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)	: TForm(Owner)
{
}
//---------------------------------------------------------------------------
int i;
void ping_sub(String host)
{
  Form1->ICMP1->Host=host;
  try{
		Form1->ICMP1->Ping();
		Sleep(10);
		Application->ProcessMessages();
	 }
   catch(...)
     {
	 if(Form1->CheckBox1->Checked==false)
	  {
	  Form1->ListBox1->Items->Add("Ping faild !");
	  Application->ProcessMessages();
	  }
	 else
	 {
	 // Form1->ListBox1->Items->Add("*");
	  Application->ProcessMessages();
          }
    }
}
void __fastcall TForm1::PingClick(TObject *Sender)  //Start
{
 String adr,adr1,c;
 ListBox1->Items->Clear();

 if(CheckBox1->Checked==false)
 {
   ping_sub(EHost1->Text);
   Button1->Enabled=true;
   ListBox1->Items->Add("");
   ListBox1->Items->Add("終了");
 }
 else
 {
  adr=Edit1->Text+"."+Edit2->Text+"."+ Edit3->Text+".";

  Button1->Enabled=false;

  for(i=1;i<256;i++)
  {
	 c=IntToStr(i);
	 adr1=adr+c;
	 ping_sub(adr1);
	 Application->ProcessMessages();
	 Label3->Caption=adr1;
  }
  ListBox1->Items->Add("");
  ListBox1->Items->Add("終了");
  Button1->Enabled=true;
 }
}
//---------------------------------------------------------------------------

void __fastcall TForm1::ICMP1Reply(TComponent *ASender, TReplyStatus * const AReplyStatus)

{
UnicodeString Result;
Result = "Received "+UnicodeString(AReplyStatus->BytesReceived)+
" bytees from "+AReplyStatus->FromIpAddress+
", time = "+UnicodeString(AReplyStatus->MsRoundTripTime)+
" ms, ttl ="+UnicodeString((int)AReplyStatus->TimeToLive);
if(Result.Pos0("0.0.0")<0)
 ListBox1->Items->Add(Result);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  Close();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::CheckBox1Click(TObject *Sender)
{
  if(CheckBox1->Checked==true)
   {
	   Edit1->Enabled=true;
	   Edit2->Enabled=true;
	   Edit3->Enabled=true;
	   EHost1->Enabled=false;
	   Button1->Enabled=false;
	   Button2->Enabled=true;
   }
   else
   {
	   Edit1->Enabled=false;
	   Edit2->Enabled=false;
	   Edit3->Enabled=false;
	   EHost1->Enabled=true;
	   Button1->Enabled=true;
	   Button2->Enabled=false;
   }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormActivate(TObject *Sender)
{
  Form1->Top=100;
  Form1->Left=700;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
 i=255;
 Button1->Enabled=true;
}
//---------------------------------------------------------------------------